package org.shoukaiseki.kakaroto.Interface;

import org.shoukaiseki.kakaroto.entity.BaseDictEnum;
import org.shoukaiseki.kakaroto.enums.DictDataCssClass;
import org.shoukaiseki.common.exception.MessageVirtualException;
import org.shoukaiseki.common.utils.StringUtils;

import java.util.List;

public interface DictTypeEnumData {

    //如果不是枚举对象,则获取该类作为枚举元素
    default List<BaseDictEnum> getEnumConstants(){
        return null;
    }

    default String getValueString(){
        if(getDictEnum()!=null){
            String value = getDictEnum().getValueString();
            if(StringUtils.isNull(value)){
                return ((Enum)this).name();
            }
            return value;
        }
        throw new MessageVirtualException("getDictEnum() 为空时必须重写 getValueString() 方法");
    }

    default Integer getValueInteger(){
        if(StringUtils.isEmpty(this.getValueString())){
            return null;
        }
        return Integer.parseInt(this.getValueString());
    };

    default String getLabel(){
        if(getDictEnum()!=null){
            return getDictEnum().getLabel();
        }
        return null;
    }

    default int getSort(){
        if(getDictEnum()!=null){
            return getDictEnum().getSort();
        }
        return 0;
    }

    default String getRemark(){
        if(getDictEnum()!=null){
            return getDictEnum().getRemark();
        }
        return "";
    }

    default String getStatus(){
        if(getDictEnum()!=null){
            return getDictEnum().getStatus();
        }
        return "0";
    };


    default BaseDictEnum getDictEnum(){
        return null;
    }

    /**
     * true: 忽略插入到字典
     * @return
     */
    default boolean isIgnoreInsert(){
        if(getDictEnum()!=null){
            return getDictEnum().isIgnoreInsert();
        }
        return false;
    }

    default DictDataCssClass getCssClass(){
        DictDataCssClass cssClass = null;
        if(getDictEnum()!=null){
            cssClass = getDictEnum().getCssClass();;
        }
        if(cssClass!=null){
            return cssClass;
        }
        return DictDataCssClass.DEFAULT;
    }

}
